Создаем класс модели, ресурса и коллекции данных

Magento использует "тонкие" модели. Для этого создается две модели:

  1. обычная модель для реализации бизнес-логики,
  2. ресурс-модель - для взаимодействия с базой данных.

И так, нам нужно создать две модели + класс ресурса. Класс ресурса используется для вывода данных grid-ом.

Создаем класс модели

Создаем папку:

app/code/local/My/Articles/Model

Добавляем файл:

app/code/local/My/Articles/Model/Articles.php

Добавляем код:

<?php
class My_Articles_Model_Articles extends Mage_Core_Model_Abstract { public function _construct() { parent::_construct(); /** * Инициализация модели. В файле конфигурации (см. ниже)
* Тег <myarticles> / Файл Articles.php */ $this->_init("myarticles/articles"); } }
Обратите внимание, здесь правильно _construct(), а не __construct()

Добавляем ресурс-модель

Тут мы реализуем удаление картинки после удаления записи, а также, функционал вывода пути к картинке.

Создаем папку:

app/code/local/My/Articles/Model/Resource

Создаем файл:

app/code/local/My/Articles/Model/Resource/Articles.php

Добавляем код:

<?php
class My_Articles_Model_Resource_Articles extends Mage_Core_Model_Mysql4_Abstract { public function _construct() { /* Инициализация ресурс-модели. В файле конфигурации (см. ниже) Тег <myarticles> / тег <table_myarticles> id - имя поля с Primary Key */ $this->_init("myarticles/table_myarticles", "id"); }
/** * Функция вызывается после удаления данных * Тут мы удаляем файл картинки * @return Mage_Core_Model_Resource_Db_Abstract */ protected function _afterDelete() { $helper = Mage::helper('myarticles'); @unlink($helper->getImagePath($this->getId())); return parent::_afterDelete(); }
/** * Функция возвращает путь к картинке * Воспользуемся для этого нашим хелпером * @return null */ public function getImageUrl() { $helper = Mage::helper('myarticles'); if ($this->getId() && file_exists($helper->getImagePath($this->getId()))) { return $helper->getImageUrl($this->getId()); } return null; } }

Добавляем в файл конфигурации

app/code/local/My/Articles/etc/config.xml

Нам нужно добавить параметры (см. комментарии)

  1. Код для моделей
  2. Код для ресурсов модели
<?xml version="1.0" ?>
<config>
   <modules>
       <My_Articles>
           <version>1.0.0</version>
       </My_Articles>
   </modules>
   <!-- Код для контроллера -->
   <frontend>
       <routers>
           <marticles>
               <use>standard</use>
               <args>
                   <module>My_Articles</module>
                   <frontName>articles</frontName>
               </args>
           </marticles>
       </routers>
   </frontend>
   <global>
   <!-- Код для моделей -->
    <models>
        <myarticles>
            <!-- Мы создали класс My_Articles_Model_Articles, в этом параметре, мы указываем только путь к файлу My_Articles_Model без имени файла Articles -->
            <class>My_Articles_Model</class>
            <resourceModel>myarticles_recource</resourceModel>
        </myarticles>
        <!-- Код для ресурсов модели -->
        <myarticles_recource>
            <class>My_Articles_Model_Resource</class>
            <entities>
                <table_myarticles>
                    <table>my_articles</table>
                </table_myarticles>
            </entities>
        </myarticles_recource>
    </models>
       <!-- Код для добавления таблиц в базу -->
       <resources>
           <marticles_setup>
               <setup>
                   <module>My_Articles</module>
               </setup>
           </marticles_setup>
       </resources>
   </global>
</config>

Создаем модель коллекций

Ресурсы используются для вывода списка данных из модели. Ресурсы используются в Grid-e

Создаем папку:

app/code/local/My/Articles/Model/Resource/Articles

Создаем файл:

app/code/local/My/Articles/Model/Resource/Articles/Collection.php

Добавляем код:

<?php
class My_Articles_Model_Resource_Articles_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract { public function _construct() { parent::_construct(); /** * Инициализация коллекции модели. В файле конфигурации * Тег <myarticles> / Файл Articles.php */ $this->_init('myarticles/articles'); } }